Bring brink skip_allocate
authorMatthias Clasen <mclasen@redhat.com>
Wed, 5 Jun 2019 00:31:53 +0000 (00:31 +0000)
committerMatthias Clasen <mclasen@redhat.com>
Wed, 5 Jun 2019 00:31:53 +0000 (00:31 +0000)
This was removed by accident in 580aa8204f45768,
together with some no longer needed popover
special-casing.

gtk/gtkwidget.c

index 8221d31d918014df3ba7fc5eaebbbb17d0467a2a..fd8f5bf17f02d67608d465988d5e0eafacde3272 100644 (file)
@@ -4265,6 +4265,7 @@ gtk_widget_allocate (GtkWidget    *widget,
 {
   GtkWidgetPrivate *priv = gtk_widget_get_instance_private (widget);
   GdkRectangle adjusted;
+  gboolean alloc_needed;
   gboolean size_changed;
   gboolean baseline_changed;
   gboolean transform_changed;
@@ -4297,6 +4298,7 @@ gtk_widget_allocate (GtkWidget    *widget,
     }
 #endif /* G_ENABLE_DEBUG */
 
+  alloc_needed = priv->alloc_needed;
   /* Preserve request/allocate ordering */
   priv->alloc_needed = FALSE;
 
@@ -4420,6 +4422,9 @@ gtk_widget_allocate (GtkWidget    *widget,
   if (priv->surface_transform_data)
     sync_widget_surface_transform (widget);
 
+  if (!alloc_needed && !size_changed && !baseline_changed)
+    goto skip_allocate;
+
   priv->width = adjusted.width;
   priv->height = adjusted.height;
   priv->baseline = baseline;
@@ -4461,6 +4466,7 @@ gtk_widget_allocate (GtkWidget    *widget,
 
   gtk_widget_update_paintables (widget);
 
+skip_allocate:
   if (size_changed || baseline_changed)
     gtk_widget_queue_draw (widget);
   else if (transform_changed && priv->parent)